<%@ include file="/WEB-INF/template/include.jsp"%>
<%@ include file="localHeader.jsp"%>
<openmrs:htmlInclude file="/scripts/calendar/calendar.js" />
<openmrs:htmlInclude file="/scripts/jquery/jquery-1.3.2.min.js" />
<openmrs:require privilege="View Orders" otherwise="/login.htm" redirect="/module/simplelabentry/existingOrders.htm" />

<br/>

    <input type="hidden" name="action" value="render"/>
    <b class="boxHeader">Step 1. Choose which results you want to enter:</b>
    <div class="box">
        <br>

        <table>
            <tr>
			<form id="getExistingOrders" action="existingOrders.htm" method="get">
                <td>
                    <label class="desc" for="orderDate">Date</label>
                </td>
                <td>
                    <span>
                        <input type="text" id="orderDate" name="orderDate" size="10" value="<c:if test="${!empty param.orderDate}">${param.orderDate}</c:if><c:if test="${empty param.orderDate}">${todayStr}</c:if>" onFocus="showCalendar(this);resetPrintBtn();" />
                    </span>
                </td>

                <td>
                    Select Lab:
                </td>
                <td>
                    <select name="labName" id="labName" onchange="resetPrintBtn()">
                        <option id="select">Select</option>
                        <c:forEach items="${headingList}" var="tabHeading">

                            <openmrs:hasPrivilege privilege="View ${tabHeading.name}">
                                <option id="${tabHeading.name}" name="${tabHeading.name}" value="${tabHeading.name}" <c:if test="${!empty param.labName && param.labName == tabHeading.name}">selected="selected"</c:if>><spring:message code="${tabHeading.name}"/></option>
                            </openmrs:hasPrivilege>
                        </c:forEach>
                    </select>
                </td>
				<td>
				<input type="button" name="getList" id="getList" value="Get Work List" onClick="submitGetForm()"/>
				</td>
			 </form>
			 <c:if test="${!empty param.orderDate || !empty param.labName && param.labName != 'Select'}" >
            <form id="printExistingOrders" method="post" action="runAndRenderLabOrderReport.htm">
            <td colspan ="6" >
				<input type="hidden" id="orderDate" name="orderDate" size="10" value="<c:if test="${!empty param.orderDate}">${param.orderDate}</c:if><c:if test="${empty param.orderDate}">${todayStr}</c:if>" onFocus="showCalendar(this)" />
				<input type="hidden" id="labName" name="labName" value="${param.labName}"/>
                <input type="button" name="printList" id="printList" value="Print Work List" onClick="submitPrintForm()"/>
            </td>
			</c:if>
			 </form>


            </tr>
        </table>

        <br>

    </div>


<br/>
<c:if test="${!empty param.orderDate || !empty param.labName && param.labName != 'Select'}">
    <openmrs:portlet url="enterResult"
        id="orderEntrySectionId"
        moduleId="simplelabentry"
        parameters="workList=true|confidentialTest=false|limit=open|groupKey=${param.labName}|orderDate=${param.orderDate}" />
</c:if>

<script type="text/javascript">

	function resetPrintBtn(){
		jQuery("#printList").hide();
	}
	
    function submitPrintForm(){
        var orderDate = document.getElementById('orderDate').value;

        if(orderDate==null || orderDate=="")
        {
            alert("Please enter Order Date");
        }
        else if (!datelessthanequaltoday(orderDate))
        {
            alert('You cannot enter a date in the future!');
        }
        else if(!dateISO(orderDate))
        {
            alert("Please enter valid Order Date");
                document.getElementById('orderDate').value = "";
        }
        else if(document.getElementById('labName').value=="Select")
        {
            alert("Please Select Lab Name");
        }
        else
        {
            document.getElementById('printExistingOrders').submit();
        }
    }
	function submitGetForm(){
        var orderDate = document.getElementById('orderDate').value;

        if(orderDate==null || orderDate=="")
        {
            alert("Please enter Order Date");
        }
        else if (!datelessthanequaltoday(orderDate))
        {
            alert('You cannot enter a date in the future!');
        }
        else if(!dateISO(orderDate))
        {
            alert("Please enter valid Order Date");
                document.getElementById('orderDate').value = "";
        }
        else if(document.getElementById('labName').value=="Select")
        {
            alert("Please Select Lab Name");
        }
        else
        {
            document.getElementById('getExistingOrders').submit();
        }
    }

   function dateISO(value) {
        return /^\d{2}[\/-]\d{2}[\/-]\d{4}$/i.test(value);
    }
    function datelessthanequaltoday(value) {
        var choseDate = getDateFromFormat(value, "dd/MM/yyyy");
        return value ? choseDate <= new Date() : true;
    }

    // Support method for date
    //Parse a string and convert it to a Date object.
    //If string cannot be parsed, return null.
    //Avoids regular expressions to be more portable.
    function getDateFromFormat(val, format) {
        val = val + "";
        format = format + "";
        var i_val = 0;
        var i_format = 0;
        var c = "";
        var token = "";
        var token2 = "";
        var x, y;
        var year = new Date().getFullYear();
        var month = 1;
        var date = 1;
        var hh = 0;
        var mm = 0;
        var ss = 0;
        var ampm = "";
        while (i_format < format.length) {
            // Get next token from format string
            c = format.charAt(i_format);
            token = "";
            while ((format.charAt(i_format) == c) && (i_format < format.length)) {
                token += format.charAt(i_format++);
            }
            // Extract contents of value based on format token
            if (token == "yyyy" || token == "yy" || token == "y") {
                if (token == "yyyy") {
                    x = 4;
                    y = 4;
                }
                if (token == "yy") {
                    x = 2;
                    y = 2;
                }
                if (token == "y") {
                    x = 2;
                    y = 4;
                }
                year = getInt(val, i_val, x, y);
                if (year == null) {
                    return null;
                }
                i_val += year.length;
                if (year.length == 2) {
                    if (year > 70) {
                        year = 1900 + (year - 0);
                    } else {
                        year = 2000 + (year - 0);
                    }
                }
            } else if (token == "MMM" || token == "NNN") {
                month = 0;
                var names = (token == "MMM" ? (Date.monthNames
                .concat(Date.monthAbbreviations)) : Date.monthAbbreviations);
                for ( var i = 0; i < names.length; i++) {
                    var month_name = names[i];
                    if (val.substring(i_val, i_val + month_name.length)
                    .toLowerCase() == month_name.toLowerCase()) {
                        month = (i % 12) + 1;
                        i_val += month_name.length;
                        break;
                    }
                }
                if ((month < 1) || (month > 12)) {
                    return null;
                }
            } else if (token == "EE" || token == "E") {
                var names = (token == "EE" ? Date.dayNames : Date.dayAbbreviations);
                for ( var i = 0; i < names.length; i++) {
                    var day_name = names[i];
                    if (val.substring(i_val, i_val + day_name.length).toLowerCase() == day_name
                    .toLowerCase()) {
                        i_val += day_name.length;
                        break;
                    }
                }
            } else if (token == "MM" || token == "M") {
                month = getInt(val, i_val, token.length, 2);
                if (month == null || (month < 1) || (month > 12)) {
                    return null;
                }
                i_val += month.length;
            } else if (token == "dd" || token == "d") {
                date = getInt(val, i_val, token.length, 2);
                if (date == null || (date < 1) || (date > 31)) {
                    return null;
                }
                i_val += date.length;
            } else if (token == "hh" || token == "h") {
                hh = getInt(val, i_val, token.length, 2);
                if (hh == null || (hh < 1) || (hh > 12)) {
                    return null;
                }
                i_val += hh.length;
            } else if (token == "HH" || token == "H") {
                hh = getInt(val, i_val, token.length, 2);
                if (hh == null || (hh < 0) || (hh > 23)) {
                    return null;
                }
                i_val += hh.length;
            } else if (token == "KK" || token == "K") {
                hh = getInt(val, i_val, token.length, 2);
                if (hh == null || (hh < 0) || (hh > 11)) {
                    return null;
                }
                i_val += hh.length;
                hh++;
            } else if (token == "kk" || token == "k") {
                hh = getInt(val, i_val, token.length, 2);
                if (hh == null || (hh < 1) || (hh > 24)) {
                    return null;
                }
                i_val += hh.length;
                hh--;
            } else if (token == "mm" || token == "m") {
                mm = getInt(val, i_val, token.length, 2);
                if (mm == null || (mm < 0) || (mm > 59)) {
                    return null;
                }
                i_val += mm.length;
            } else if (token == "ss" || token == "s") {
                ss = getInt(val, i_val, token.length, 2);
                if (ss == null || (ss < 0) || (ss > 59)) {
                    return null;
                }
                i_val += ss.length;
            } else if (token == "a") {
                if (val.substring(i_val, i_val + 2).toLowerCase() == "am") {
                    ampm = "AM";
                } else if (val.substring(i_val, i_val + 2).toLowerCase() == "pm") {
                    ampm = "PM";
                } else {
                    return null;
                }
                i_val += 2;
            } else {
                if (val.substring(i_val, i_val + token.length) != token) {
                    return null;
                } else {
                    i_val += token.length;
                }
            }
        }
        // If there are any trailing characters left in the value, it doesn't match
        if (i_val != val.length) {
            return null;
        }
        // Is date valid for month?
        if (month == 2) {
            // Check for leap year
            if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) { // leap
                // year
                if (date > 29) {
                    return null;
                }
            } else {
                if (date > 28) {
                    return null;
                }
            }
        }
        if ((month == 4) || (month == 6) || (month == 9) || (month == 11)) {
            if (date > 30) {
                return null;
            }
        }
        // Correct hours value
        if (hh < 12 && ampm == "PM") {
            hh = hh - 0 + 12;
        } else if (hh > 11 && ampm == "AM") {
            hh -= 12;
        }
        return new Date(year, month - 1, date, hh, mm, ss);
    }

    function getInt(str,i,minlength,maxlength) {
        for (var x=maxlength; x>=minlength; x--) {
            var token=str.substring(i,i+x);
            if (token.length < minlength) {
                return null;
            }
            if (_isInteger(token)) {
                return token;
            }
        }
        return null;
    }

    function _isInteger(val) {
        var digits="1234567890";
        for (var i=0; i < val.length; i++) {
            if (digits.indexOf(val.charAt(i))==-1) {
                return false;
            }
        }
        return true;
    }
</script>

<%@ include file="/WEB-INF/template/footer.jsp"%>
